package com.itheima.filter;


import com.itheima.common.JwtUtils;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 登录校验过滤器
 */
@WebFilter("/*")
public class LoginCheckFilter implements Filter {

    /**
     * @param request  请求对象（获取请求中的所有信息）
     * @param response 响应对象（通过Response响应数据）
     * @param chain    过滤器链（调用dofilter方法表示放行，不调用就表示拦截）
     * @throws IOException
     * @throws ServletException
     */
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        //自己强转类型
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse resp = (HttpServletResponse) response;

        //排除不需要拦截的请求（/login）
        String uri = req.getRequestURI();
        if (uri.contains("/login")) {
            //表示放行
            chain.doFilter(request, response);
            return; //代码结束，不往后面执行了   代码结束，不往后面执行了  代码结束，不往后面执行了
        }

        //判断用户是否登录
        String token = req.getHeader("token");
        //通过工具类校验jwt是否合法
        try {
            JwtUtils.parseJWT(token);
            //表示放行
            chain.doFilter(request, response);
        } catch (Exception e) {
            resp.setStatus(401);//401是和前端提前约定好的，表示没有权限访问，未登录
        }
    }
}
